Interaktív plotok: Plotly¶

A Plotly egy Open Source grafikai csomag, ami nem csak Python-ban érhető el, de R-ben, sőtt MATLAB-ban is. A segítségével interaktív plotokat készíthetünk, amiket aztán HTML-be kimentve megtarthatjuk azok interaktivitását.

Telepítése a szokásos módon történhet:

pip install plotly

Ezt követően két eltérő módon importálhatjuk és állhatunk neki a plottolásnak:

  • import plotly.express as px
  • import plotly.graph_objects as go

A Plotly express egy gyorsabb utat jelent a plotok elkészítéséhez, viszont nem minden beállítást érhetünk el rajta keresztül, illetve kevésbé általános. A graph_objects használatánál több beállításra is szükség lehet, de itt szinte minden megoldható, hiszen egy üres 'rajzlapról' indulunk, és mi töltjük fel.

A Plotly express nagyon jól használható Pandas DataFrame-el kombinálva, ahol az adatok már megfelelően elő vannak készítve. Ez a Plotly dokumentáció alaján az ajánlott mód a plotok elkészítéséhez.

A dokumentációja nagyon jó, rengeteg példát mutat, így könnyű megtalálni amit keresünk. https://plotly.com/python/

In [1]:
import plotly.express as px
import plotly.graph_objects as go
import pandas as pd
import seaborn as sns

df = px.data.iris() # iris is a pandas DataFrame
df.head()
Out[1]:
sepal_length sepal_width petal_length petal_width species species_id
0 5.1 3.5 1.4 0.2 setosa 1
1 4.9 3.0 1.4 0.2 setosa 1
2 4.7 3.2 1.3 0.2 setosa 1
3 4.6 3.1 1.5 0.2 setosa 1
4 5.0 3.6 1.4 0.2 setosa 1

Egyszerű plotok és felépítésük¶

Az iris dataset importálása a px-en keresztül is megtörténhet, ezt fogjuk most példaként használni.

In [2]:
fig = px.scatter(df, x="sepal_width", y="sepal_length")
fig.show()

Interaktivitás:¶

  • Hoverdata
  • Zoom
  • Adatsorok 'kikapcsolása'
  • Adatpontok kijelölése (esemény definiálható)
  • Adatpontra kattintás (esemény definiálható)
  • letöltés PNG képként
In [3]:
'''Méret petal_length alapján, méret faj alapján'''
fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species",
                 size='petal_length', hover_data=['petal_width'],
                 title='Plotly scatter plot')
fig.show()

Formázási, elrendezési beállítások¶

Subplots¶

https://plotly.com/python/subplots/

A graph_objects segítségével teljesen magunk rakhatjuk össze a plotokat.

Itt a fig.add_trace() függvényre hívnám fel a figyelmet, amivel bármilyen, már elkészült Figure objektumhoz adhatunk új adatsort. (Plotly Express-el készült plotot is kiegészíthetünk így.)

In [8]:
from plotly.subplots import make_subplots

fig = make_subplots(rows=1, cols=2)

fig.add_trace(go.Scatter(y=[4, 2, 1], mode="lines"), row=1, col=1)
fig.add_trace(go.Bar(y=[2, 1, 3]), row=1, col=2)

fig.show()

A Plotly express esetén facet_col illetve facet_row beállításokkal készíthetünk subplotokat a dataframe egy oszlopának értékei alapján

In [9]:
df = px.data.iris()
fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species", facet_col="species",
                 title="Subplots Witin A Plotly Express Figure")
fig.show()

Méret és kinézet¶

In [10]:
'''Defaults in px'''
px.defaults.template = "ggplot2"
px.defaults.color_continuous_scale = px.colors.sequential.Blackbody
px.defaults.width = 600
px.defaults.height = 400

df = px.data.iris()
fig = px.scatter(df, x="sepal_width", y="sepal_length", color="sepal_length")
fig.show()
In [11]:
df = px.data.tips()
fig = px.histogram(df, x="total_bill", y="tip", color="sex",
                   marginal="box", # or violin, rug
                   hover_data=df.columns)
fig.show()
In [12]:
df = px.data.iris()
fig = px.scatter_3d(df, x='sepal_length', y='sepal_width', z='petal_width',
              color='species')
fig.show()